package backtype.storm.metric.api;

import java.util.Collection;
import java.util.Map;

import backtype.storm.task.IErrorReporter;
import backtype.storm.task.TopologyContext;


public interface IMetricsConsumer {
    public static class TaskInfo {
        public TaskInfo() {
        }


        public TaskInfo(String srcWorkerHost, int srcWorkerPort, String srcComponentId, int srcTaskId,
                long timestamp, int updateIntervalSecs) {
            this.srcWorkerHost = srcWorkerHost;
            this.srcWorkerPort = srcWorkerPort;
            this.srcComponentId = srcComponentId;
            this.srcTaskId = srcTaskId;
            this.timestamp = timestamp;
            this.updateIntervalSecs = updateIntervalSecs;
        }

        public String srcWorkerHost;
        public int srcWorkerPort;
        public String srcComponentId;
        public int srcTaskId;
        public long timestamp;
        public int updateIntervalSecs;
    }

    public static class DataPoint {
        public DataPoint() {
        }


        public DataPoint(String name, Object value) {
            this.name = name;
            this.value = value;
        }


        @Override
        public String toString() {
            return "[" + name + " = " + value + "]";
        }

        public String name;
        public Object value;
    }


    void prepare(Map stormConf, Object registrationArgument, TopologyContext context,
            IErrorReporter errorReporter);


    void handleDataPoints(TaskInfo taskInfo, Collection<DataPoint> dataPoints);


    void cleanup();
}
